home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / developer-tools / c-tools / vbcc / machines / amiga68k / libsrc / stdio / _putbuf.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-06-17  |  747 b   |  27 lines

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. /*  schreibt Daten aus Buffer   */
  5. /*  fuegt c als neues Zeichen ein, falls c!=EOF */
  6. int _putbuf(int c,FILE *f)
  7. {
  8.     _chkabort();
  9.     if(!f) return(EOF);
  10.     if((f->flags&(_WRITEABLE|_READ|_EOF|_ERR))!=_WRITEABLE) return(EOF);
  11.     if(!f->bufsize){if(f->flags&_UNBUF) f->bufsize=1; else f->bufsize=BUFSIZ;}
  12.     if(!f->base){
  13.         if(!(f->base=(char *)malloc(f->bufsize+1)+1))
  14.             return(EOF);
  15.     }else{
  16.         int len=f->pointer-f->base;
  17.         if(f->flags&_WRITE)
  18.          if(Write(f->filehandle,f->base,len)!=len) return(EOF);
  19.     }
  20.     f->flags|=_WRITE;
  21.     f->pointer=f->base;
  22.     f->count=f->bufsize;
  23.     *f->pointer++=c;
  24.     f->count--;
  25.     return(0);  /*  hier noch ueberlegen    */
  26. }
  27.